package org.javacore.colgoogle;

import com.google.common.base.Function;
import com.google.common.collect.MapMaker;

import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.TimeUnit;

/**
 * Created by 子木 on 2016/2/20.
 */
public class MapMakerT {
	// 使用案例:存储验证码
	// <String, String> == <用户唯一，验证码>
	// expiration(15, TimeUnit.MINUTES) 有效期15分钟
	ConcurrentMap<String, String> capthcaMap = new MapMaker().expiration(15, TimeUnit.MINUTES).makeMap();

	// 设置ConcurrentMap的concurrencyLevel参数 ，例如ConcurrentHashMap是用来控制其Segment数组的大小
	ConcurrentMap<String, Object> map1 = new MapMaker().concurrencyLevel(8).makeMap();

	// 构造各种不同reference作为key和value的map
	ConcurrentMap<String, Object> map2 = new MapMaker().softKeys().weakValues().makeMap();

	// 提供当Map里面不包含所get的项，可以自动加入到Map的功能
	ConcurrentMap<String, Integer> map3 = new MapMaker().makeComputingMap(new Function<String, Integer>() {
		public Integer apply(String key) {
			return 1;
		}
	});
}
